package fr.vahren.sriksal.generation;


public interface DropStrategy {
	
	enum Direction {
		UP, LEFT, RIGHT, DOWN, NOWHERE
	};

	/**
	 * Create new drops.
	 * @param map
	 */
	void spawnDrops(int[][] map);

	/**
	 * See if the drop gets some soil.
	 * @param drop
	 * @param nextPosition
	 * @param map
	 */
	void fillDrop(Drop drop, Position nextPosition, int[][] map);

	/**
	 * Move the drop.
	 * @param drop
	 * @param nextPosition
	 * @param map
	 */
	void move(Drop drop, Position nextPosition,int[][] map);

	/**
	 * Get next position. If the drop can't move, evaporate.
	 * @param drop
	 * @param map
	 * @return
	 */
	Position getNextPosition(Drop drop, int[][] map);

	/**
	 * Initialize the eroder.
	 * @param map
	 */
	void init(int[][] map);


	int[][] getTerrainMap();



}
